import {defineStore} from 'pinia'
import util from '@/utils/util'

export default defineStore('mainStore', {
	state () {
		return {
			version: "1.0.0",
			showShift: false,
			tipVer: 0,
			cacheVer: 0,
			idtype: 'user',
			// 我的定位
			location: {dist_id: 0, dist_name: '', city_id: 0, city_name:'', name: '', address:'', lng: 0, lat: 0},
			// 当前位置
			local: {dist_id: 0, dist_name: '', city_id: 0, city_name:'', name: '', address:'', lng: 0, lat: 0},
			app: { // APP整体数据
				version: '0', // 大版本号
				adVersion: '0', // 广告数据版本号	
				serviceVersion: '0' // 服务数据版本号
			},
			modules: {} as object
		}
	},
	getters: {
		device: () => this.app ? this.app.device : false, //兼容页面报错问题
		theme: () => this.app ? this.app.theme : false,
		// color: state => this.app ? this.app.color : false,
		// avatar: state => this.user.avatar,
		// nickname: state => this.user.name,
		// welcome: state => this.user.welcome,
		// role: state => this.user.role
	},
	actions: {
		update(values: object) {
			for(const i in values){
				if(['user','store','supplier','agent','courier','plat','location','local'].includes(i)){
					Object.assign(this[i], values[i])
				} else {
					this[i] = values[i]
				}
			}
		},
		assign(values) {
			for(const i in values){
				//if(['user','store','supplier','agent','courier','plat','location','local'].includes(i)){
				Object.assign(this[i], values[i])
				//}
			}
		},
		// 设置APP信息
		app(values: object) {
			for (let i in values) {
				for (let j in this.app) {
					if (i === j) {
						this.app[j] = values[i]
					}
				}
			}
		},
		// 查看公共数据版本是否更新
		// 返回有data数据时代表有更新，未返回data数据代表不需要更新
		// 返回9010错误时代表还未生成公共数据版本，需要先调用对应接口生成数据版本号
		async checkModuleUpdate () {
			const res = await uni.$u.http.post('config/queryHasUpdates', { version: this.app.commonDataVersion })
			//console.log('各个模块数据数据' + JSON.stringify(res))
			if (res.code === 200) {
				if (!res.data) return
				const data = res.data.versionData
				let obj = { updateAd: false, updateService: false }
				this.commonDataVersion = res.data.version

				if (data.advertVersion !== this.app.adVersion) {
					obj.updateAd = true
				}
				if (data.serviceVersion !== this.app.serviceVersion) {
					obj.updateService = true
				}
				return obj
			} else {
				util.msg(res.message)
			}
		},
		// 查询广告（首页、车圈、服务）
		getAds({commit}) {
			uni.$u.http.post('config/queryAdverts', {
				clientDictKey: 1,
				version: this.app.adVersion
			}).then(res => {
				if (res.code === 200) {
					this.adData = res.data
					this.adVersion = res.data.version
				} else {
					util.msg(res.message)
				}
			})
		},
		// 获取首页服务模块、产品模块和服务页服务模块数据
		getServices({commit,state}) {
			uni.$u.http.post('serviceFunc/searchServiceFunc', {
				version: this.app.serviceVersion
			}).then(res => {
				// console.log('首页服务模块、产品模块和服务页服务模块数据' + JSON.stringify(res.data))
				if (res.code === 200) {
					this.modulesData = res.data.data
					this.serviceVersion = res.data.version
				} else {
					util.msg(res.message)
				}
			})
		}
	}
})
